package cn.xyy.bcode.api;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import cn.xyy.bcode.domain.MonthBills;
import cn.xyy.bcode.service.MonthBillsService;
import cn.xyy.common.domain.mvc.R;

/**
 * mysql 分表实践案例，也可以借助第三方分库分表方案实现
 * 
 * <p>
 * 1.表按月份做水平分表
 * </p>
 * <p>
 * 2.利用存储过程实现按月动态创建表
 * </p>
 * <p>
 * 3.通过定时器调用存储过程创建下月表
 * </p>
 * 
 * 
 * @author xyy
 *
 */
@RestController
@RequestMapping(value = "/public/rest/bills")
public class MonthBillsRest {

	@Autowired
	private MonthBillsService billsService;

	// 账单结算的API
	// 测试地址
	// http://localhost:8888/public/rest/bills/settleUp?billsInfo=白玉竹子*3：9999.999&payMoney=9999.999&machineSerialNo=NF-002-X
	@RequestMapping("/settleUp")
	public R settleUp(MonthBills monthBills) {
		// 设置账单交易时间为当前时间
		monthBills.setBillDate(new Date(System.currentTimeMillis()));
		// 使用UUID随机生成一个流水号
		monthBills.setSerialNumber(monthBills.getMachineSerialNo() + System.currentTimeMillis());
		// 调用新增账单数据的service方法
		if (billsService.insert(monthBills) > 0) {
			return R.ok("账单结算成功");
		}
		return R.error("账单结算失败");
	}

	// http://localhost:8888/public/rest/bills/selectBySerialNumber?serialNumber=NF-002-X1669356781376
	// 根据流水号查询数据的API
	@RequestMapping("/selectBySerialNumber")
	public R selectBySerialNumber(MonthBills monthBills) {
		// 调用Service层根据流水号查询数据的方法
		MonthBills result = billsService.selectBySerialNumber(monthBills);
		if (result != null) {
			return R.ok(result);
		}
		return R.error("未查询到流水号对应的数据");
	}

	// http://localhost:8888/public/rest/bills/getBillList?startTime=2022-11-01&endTime=2022-12-30
	// 按照范围查询两个日期之间的所有账单数据
	@RequestMapping("/getBillList")
	public R getList(MonthBills monthBills) {
		// 调用Service层根据流水号查询数据的方法
		List<MonthBills> bills = billsService.getList(monthBills);
		if (bills != null) {
			return R.ok(bills);
		}
		return R.error("指定的日期中没有账单数据");
	}

}
